#ifndef HFT_MARKET_DATA_PROVIDER_H
#define HFT_MARKET_DATA_PROVIDER_H

#include "market_data_handler.h"
#include "market_data_types.h"
#include <memory>
#include <vector>

namespace hft {

/**
 * @class MarketDataProvider
 * @brief 市场数据提供者接口
 * 
 * 定义市场数据源的连接和数据分发接口
 */
class MarketDataProvider {
public:
    virtual ~MarketDataProvider() = default;
    
    /**
     * @brief 初始化数据源
     * @param config 配置参数
     * @return 是否初始化成功
     */
    virtual bool init(const MarketDataConfig& config) = 0;
    
    /**
     * @brief 启动数据源
     * @return 是否启动成功
     */
    virtual bool start() = 0;
    
    /**
     * @brief 停止数据源
     */
    virtual void stop() = 0;
    
    /**
     * @brief 添加数据处理器
     * @param handler 数据处理器
     */
    virtual void addHandler(std::shared_ptr<MarketDataHandler> handler) = 0;
    
    /**
     * @brief 移除数据处理器
     * @param handler 数据处理器
     */
    virtual void removeHandler(std::shared_ptr<MarketDataHandler> handler) = 0;
    
    /**
     * @brief 订阅市场数据
     * @param symbols 合约列表
     */
    virtual void subscribe(const std::vector<Symbol>& symbols) = 0;
    
    /**
     * @brief 取消订阅市场数据
     * @param symbols 合约列表
     */
    virtual void unsubscribe(const std::vector<Symbol>& symbols) = 0;
};

} // namespace hft

#endif // HFT_MARKET_DATA_PROVIDER_H